package com.xiaowenxiong.dao;

import com.xiaowenxiong.entity.Student;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface StudentMapper {
    int deleteByPrimaryKey(String sno);

    int insert(Student record);

    int insertSelective(Student record);

    Student selectByPrimaryKey(String sno);

    int updateByPrimaryKeySelective(Student record);

    int updateByPrimaryKey(Student record);

    List<Student> selectAllStudent();

    /**
     * 查询所有学生数量
     */
    int studentTotal();

    /**
     * 分页查询学生列表
     *
     * @param pageOffset 开始的位置
     * @param pageSize   一次查询的个数
     * @return 学生列表
     */
    List<Student> selectStudentByPage(@Param(value = "pageOffset") Integer pageOffset,
                                      @Param(value = "pageSize") Integer pageSize);

    /**
     * 用于关键字筛选分页显示
     * @param pageOffset
     * @param pageSize
     * @param sno
     * @param sname
     * @param sdept
     * @param saddress
     * @return
     */
    List<Student> selectStudentByRetrieval(@Param(value = "pageOffset") Integer pageOffset,
                                           @Param(value = "pageSize") Integer pageSize,
                                           @Param(value = "sno") String sno,
                                           @Param(value = "sname") String sname,
                                           @Param(value = "sdept") String sdept,
                                           @Param(value = "saddress") String saddress
    );

    /**
     * 用于查询关键字筛选总数量
     * @param sno
     * @param sname
     * @param sdept
     * @param saddress
     * @return
     */
    int selectStudentByRetrievalTotal(@Param(value = "sno") String sno,
                                      @Param(value = "sname") String sname,
                                      @Param(value = "sdept") String sdept,
                                      @Param(value = "saddress") String saddress
    );

    /**
     * 用于查询对应学生各科成绩信息
     *
     * @param sno 学号
     * @return
     */
    List<Student> selectStudentGrade(@Param(value = "sno") String sno);

    /**
     * 用于查询修改成绩学生的基础信息
     *
     * @param sno 学号
     * @param cno 课程号
     * @return
     */
    Student selectUpdateGradeStudentInfo(@Param(value = "sno") String sno, @Param(value = "cno") Integer cno);
}